home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 10
/
FM Towns Free Software Collection 10.iso
/
fb386
/
lib
/
blb
/
selector.blb
< prev
next >
Wrap
Text File
|
1995-02-17
|
9KB
|
135 lines
61800 '-------------------------- 項目選択ルーチン version 1.12 --------------------------------------
61801 '入力 LENGTH = 文字列の長さ
61802 ' SEL = 項目数
61803 ' SEL$(n) = 表示する文字列
61804 ' TITLE$ = タイトル
61805 '出力 SEL = 項目番号(=0,1,2,・・・) 負数のとき未選択
61806 '変数 A%,B%,C%,D%,I%,J%,BLB_H%,BLB_MX%,BLB_MY%,BLB_M%,BLB_DX%,BLB_DY%,BLB_W%,BLB_T%
61807 *BLB_SELECTOR
61808 BLB_W%=LENGTH*6+40:BLB_DX%=320-BLB_W%\2:BLB_DY%=155:MOUSEPAT=0:GOSUB *BLB_MOUSEPAT
61809 MOUSE 1,,,0:GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%
61810 LINE(BLB_DX%,BLB_DY%)-STEP(BLB_W%,170),PSET,%8,BF,7
61811 LINE(BLB_DX%,BLB_DY%)-STEP(BLB_W%,16),PSET,%8,BF,%9
61812 LINE(BLB_DX%,BLB_DY%)-STEP(32+LEN(TITLE$)*6,16),PSET,%8,BF
61813 SYMBOL(BLB_DX%+22,BLB_DY%+3),TITLE$,.75!,.75!,7
61814 LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7,BF,%6
61815 LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),PSET,7:LINE(BLB_DX%+2,BLB_DY%+14)-STEP(12,-12),PSET,7
61816 LINE(BLB_DX%+BLB_W%-2,BLB_DY%)-STEP(1,170),PSET,%8,B
61817 LINE(BLB_DX%,BLB_DY%+169)-STEP(BLB_W%,0),PSET,%8
61818 LINE(BLB_DX%+3,BLB_DY%+20)-STEP(LENGTH*6+13,127),PSET,%8,B:A%=BLB_DX%+BLB_W%-21
61819 LINE(A%,BLB_DY%+36)-STEP(16,95),PSET,%8,B
61820 LINE(A%,BLB_DY%+20)-STEP(16,14),PSET,%8,B:SYMBOL(A%+3,BLB_DY%+21),"▲",.75!,.75!,%8
61821 LINE(A%,BLB_DY%+133)-STEP(16,14),PSET,%8,B:SYMBOL(A%+3,BLB_DY%+134),"▼",.75!,.75!,%8
61822 FOR I%=1 TO 2:CONNECT(BLB_DX%+BLB_W%-40*I%-1,BLB_DY%+150)-STEP(34,0)-STEP(1,1)-STEP(0,14)-STEP(-1,1)-STEP(-34,0)-STEP(-1,-1)-STEP(0,-14),%8
61823 SYMBOL(BLB_DX%+BLB_W%-40*I%+5,BLB_DY%+152),MID$("取消選択",I%*4-3,4),.75!,.75!,%8:NEXT
61824 BLB_H%=0:BLB_M%=-1:GOSUB *BLB_SEL_PUTSTR:MOUSE 1,,,1:WHILE INKEY$<>"":WEND
61825 *BLB_SEL_MAIN
61826 WAIT 1:IF BLB_T%<150 THEN BLB_T%=BLB_T%+1
61827 A%=ASC(INKEY$+" "):IF A%=24 THEN SEL=-1:GOTO *BLB_SEL_END
61828 IF A%=13 AND BLB_M%>=0 THEN SEL=BLB_M%:GOTO *BLB_SEL_END
61829 IF MOUSE(2,0)=0 THEN *BLB_SEL_MAIN ELSE BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
61830 IF BLB_MX%<0 OR BLB_MY%<0 OR BLB_MX%>BLB_W% OR BLB_MY%>170 THEN *BLB_SEL_MAIN
61831 IF BLB_MX%>1 AND BLB_MX%<15 AND BLB_MY%>1 AND BLB_MY%<15 THEN *BLB_SEL_EXIT
61832 IF BLB_MX%>4 AND BLB_MX%<BLB_W%-24 AND BLB_MY%>20 AND BLB_MY%<146 THEN *BLB_SEL_MARK
61833 IF BLB_MX%>BLB_W%-22 AND BLB_MX%<BLB_W%- 4 AND BLB_MY%> 20 AND BLB_MY%< 34 THEN *BLB_SEL_UPDOWN
61834 IF BLB_MX%>BLB_W%-22 AND BLB_MX%<BLB_W%- 4 AND BLB_MY%>133 AND BLB_MY%<147 THEN *BLB_SEL_UPDOWN
61835 IF BLB_MX%>BLB_W%-42 AND BLB_MX%<BLB_W%- 6 AND BLB_MY%>149 AND BLB_MY%<165 THEN *BLB_SEL_YESNO
61836 IF BLB_MX%>BLB_W%-82 AND BLB_MX%<BLB_W%-46 AND BLB_MY%>149 AND BLB_MY%<165 THEN *BLB_SEL_YESNO
61837 IF BLB_MX%>BLB_W%-22 AND BLB_MX%<BLB_W%- 4 AND BLB_MY%> 35 AND BLB_MY%<132 AND SEL>8 THEN *BLB_SEL_BAR
61838 IF BLB_MY%<16 THEN *BLB_SEL_MOVE
61839 GOTO *BLB_SEL_MAIN
61840 *BLB_SEL_YESNO
61841 J%=1+(MOUSE(4,0)-BLB_DX%>BLB_W%-42):B%=0
61842 WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%+J%*40:BLB_MY%=MOUSE(1)-BLB_DY%
61843 A%=(BLB_MX%>BLB_W%-42)*(BLB_MX%<BLB_W%-6)*(BLB_MY%>149)*(BLB_MY%<165)
61844 IF A%<>B% THEN LINE(BLB_DX%+BLB_W%-40*J%-41,BLB_DY%+151)-STEP(34,14),XOR,%7,BF:B%=A%
61845 WEND:IF B%=0 THEN *BLB_SEL_MAIN
61846 LINE(BLB_DX%+BLB_W%-40*J%-41,BLB_DY%+151)-STEP(34,14),XOR,%7,BF
61847 IF J%=0 THEN SEL=-1 ELSE IF BLB_M%<>-1 THEN SEL=BLB_M% ELSE *BLB_SEL_MAIN
61848 GOTO *BLB_SEL_END
61849 *BLB_SEL_EXIT
61850 B%=0:WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%
61851 A%=(BLB_MX%>1)*(BLB_MY%>1)*(BLB_MX%<15)*(BLB_MY%<15)
61852 IF A%<>B% THEN LINE(BLB_DX%+2,BLB_DY%+2)-STEP(12,12),XOR,%7,BF:B%=A%
61853 WEND:IF B%=0 THEN *BLB_SEL_MAIN ELSE SEL=-1:GOTO *BLB_SEL_END
61854 *BLB_SEL_MOVE
61855 MOUSEPAT=3:GOSUB *BLB_MOUSEPAT:C%=BLB_MX%:D%=BLB_MY%:MOUSE 4,C%,D%,BLB_RESO_X-1-BLB_W%+C%,BLB_RESO_Y-171+D%
61856 LINE(BLB_DX%,BLB_DY%)-STEP(BLB_W%,170),XOR,%7,B
61857 A%=BLB_DX%:B%=BLB_DY%:FOR I%=0 TO 1:I%=1+MOUSE(2,0):BLB_MX%=MOUSE(0)-C%:BLB_MY%=MOUSE(1)-D%
61858 IF A%<>BLB_MX% OR B%<>BLB_MY% THEN LINE(A%,B%)-STEP(BLB_W%,170),XOR,%7,B:LINE(BLB_MX%,BLB_MY%)-STEP(BLB_W%,170),XOR,%7,B
61859 A%=BLB_MX%:B%=BLB_MY%:NEXT:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1:LINE(BLB_MX%,BLB_MY%)-STEP(BLB_W%,170),XOR,%7,B
61860 MOUSEPAT=0:GOSUB *BLB_MOUSEPAT:IF BLB_DX%=BLB_MX% AND BLB_DY%=BLB_MY% THEN *BLB_SEL_MAIN
61861 GET@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%,39000
61862 PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%
61863 GET@A(BLB_MX%,BLB_MY%)-(BLB_MX%+BLB_W%,BLB_MY%+170),BLB_MEM%
61864 PUT@A(BLB_MX%,BLB_MY%)-(BLB_MX%+BLB_W%,BLB_MY%+170),BLB_MEM%,,,,,39000
61865 BLB_DX%=BLB_MX%:BLB_DY%=BLB_MY%:GOTO *BLB_SEL_MAIN
61866 *BLB_SEL_UPDOWN
61867 J%=-(MOUSE(5,0)-BLB_DY%>100):B%=0
61868 WHILE MOUSE(2,0):BLB_MX%=MOUSE(0)-BLB_DX%:BLB_MY%=MOUSE(1)-BLB_DY%-J%*113
61869 A%=(BLB_MX%>BLB_W%-22)*(BLB_MX%<BLB_W%-4)*(BLB_MY%>20)*(BLB_MY%<34)
61870 IF A%<>B% THEN LINE(BLB_DX%+BLB_W%-20,BLB_DY%+21+J%*113)-STEP(14,12),XOR,%7,BF:B%=A%
61871 IF A%=1 AND ((BLB_H%+8<SEL AND J%=1) OR (BLB_H%>0 AND J%=0)) THEN A%=J%*2-1:BLB_H%=BLB_H%+A%:GOSUB *BLB_SEL_SCROLL
61872 WEND:IF B%=1 THEN LINE(BLB_DX%+BLB_W%-20,BLB_DY%+21+J%*113)-STEP(14,12),XOR,%7,BF
61873 GOTO *BLB_SEL_MAIN
61874 *BLB_SEL_BAR
61875 MOUSE 4,BLB_DX%+BLB_W%-21,BLB_DY%+36,BLB_DX%+BLB_W%-5,BLB_DY%+130
61876 D%=MOUSE(5,0)-BLB_DY%-36-BLB_H%*92/(SEL+1)
61877 WHILE MOUSE(2,0)
61878 IF 36+BLB_H%*93/(SEL+1)<BLB_MY% AND 38+BLB_H%*93/(SEL+1)+837/(SEL+1)>BLB_MY% THEN
61879 WHILE MOUSE(2,0):A%=(MOUSE(1)-BLB_DY%-36-D%)*(SEL+1)/92
61880 IF A%<0 THEN A%=0 ELSE IF A%>SEL-8 THEN A%=SEL-8
61881 IF A%<>BLB_H% THEN
61882 B%=(A%-BLB_H%):BLB_H%=A%:MOUSE 1,,,0:GOSUB *BLB_SEL_PUTBAR
61883 IF ABS(B%)>8 THEN GOSUB *BLB_SEL_PUTSTR ELSE A%=B%:GOSUB *BLB_SEL_SCROLL
61884 MOUSE 1,,,1
61885 ENDIF
61886 WEND
61887 ELSE
61888 A%=BLB_H%+SGN(MOUSE(1)-BLB_DY%-36-BLB_H%*93/(SEL+1))*8
61889 IF A%<0 THEN A%=0 ELSE IF A%>SEL-8 THEN A%=SEL-8
61890 IF A%<>BLB_H% THEN MOUSE 1,,,0:BLB_H%=A%:GOSUB *BLB_SEL_PUTSTR:MOUSE 1,,,1
61891 ENDIF
61892 BLB_MY%=MOUSE(1)-BLB_DY%:D%=BLB_MY%-36-BLB_H%*92/(SEL+1)
61893 WEND:MOUSE 4,0,0,BLB_RESO_X-1,BLB_RESO_Y-1:GOTO *BLB_SEL_MAIN
61894 *BLB_SEL_MARK
61895 IF MOUSE(2,0)=0 THEN *BLB_SEL_MAIN
61896 A%=MOUSE(1)-BLB_DY%-21:BLB_MX%=MOUSE(0)-BLB_DX%
61897 IF BLB_MX%<4 OR BLB_MX%>15+LENGTH*6 OR A%<0 OR A%>125 OR A%>SEL*14+13 THEN A%=-1 ELSE A%=A%\14
61898 IF A%<0 THEN
61899 IF BLB_M%>=BLB_H% AND BLB_M%<BLB_H%+9 THEN GOSUB *BLB_SEL_PUTMARK:BLB_M%=-1
61900 GOTO *BLB_SEL_MARK
61901 ENDIF
61902 IF BLB_M%<>A%+BLB_H% THEN
61903 IF BLB_M%>=BLB_H% AND BLB_M%<BLB_H%+9 THEN GOSUB *BLB_SEL_PUTMARK
61904 BLB_M%=A%+BLB_H%:GOSUB *BLB_SEL_PUTMARK:BLB_T%=0
61905 ENDIF
61906 IF BLB_T%>0 AND BLB_T%<INP(&H3B04)*25/32 THEN SEL=BLB_M%:GOTO *BLB_SEL_END
61907 BLB_T%=0:GOTO *BLB_SEL_MARK
61908 *BLB_SEL_PUTMARK
61909 LINE(BLB_DX%+4,BLB_DY%+21+(BLB_M%-BLB_H%)*14)-STEP(LENGTH*6+11,13),XOR,%7,BF:RETURN
61910 *BLB_SEL_PUTSTR
61911 FOR I%=0 TO 8:IF SEL>=I%+BLB_H% THEN GOSUB *BLB_SEL_PUT1STR
61912 NEXT:GOSUB *BLB_SEL_PUTBAR:RETURN
61913 *BLB_SEL_PUT1STR
61914 LINE(BLB_DX%+4,BLB_DY%+21+I%*14)-STEP(LENGTH*6+11,13),PSET,%15+(BLB_M%=I%+BLB_H%)*7,BF
61915 SYMBOL(BLB_DX%+10,BLB_DY%+22+14*I%),SEL$(I%+BLB_H%),.75!,.75!,%8-(BLB_M%=I%+BLB_H%)*7:RETURN
61916 *BLB_SEL_PUTBAR
61917 IF SEL<9 THEN LINE(BLB_DX%+BLB_W%-20,BLB_DY%+37)-STEP(14,93),PSET,%8,BF,7:RETURN
61918 LINE(BLB_DX%+BLB_W%-21,BLB_DY%+36)-STEP(16,BLB_H%*93/(SEL+1)+1),PSET,%8,BF,%9
61919 LINE STEP(-1,0)-STEP(-14,837/(SEL+1)),PSET,%8,BF,7
61920 LINE STEP(-1,0)-(BLB_DX%+BLB_W%-5,BLB_DY%+131),PSET,%8,BF,%9:RETURN
61921 *BLB_SEL_SCROLL
61922 MOUSE 1,,,0
61923 IF A%>0 THEN
61924 GET@A(BLB_DX%+4,BLB_DY%+21+14*A%)-(BLB_DX%+BLB_W%-25,BLB_DY%+146),BLB_MEM%,39000
61925 PUT@A(BLB_DX%+4,BLB_DY%+21)-(BLB_DX%+BLB_W%-25,BLB_DY%+146-14*A%),BLB_MEM%,,,,,39000
61926 FOR I%=9-A% TO 8:GOSUB *BLB_SEL_PUT1STR:NEXT
61927 ELSE IF A%<0 THEN
61928 GET@A(BLB_DX%+4,BLB_DY%+21)-(BLB_DX%+BLB_W%-25,BLB_DY%+146-14*A%),BLB_MEM%,39000
61929 PUT@A(BLB_DX%+4,BLB_DY%+21-14*A%)-(BLB_DX%+BLB_W%-25,BLB_DY%+146),BLB_MEM%,,,,,39000
61930 FOR I%=0 TO -A%-1:GOSUB *BLB_SEL_PUT1STR:NEXT
61931 ENDIF
61932 GOSUB *BLB_SEL_PUTBAR:MOUSE 1,,,1:RETURN
61933 *BLB_SEL_END:PUT@A(BLB_DX%,BLB_DY%)-(BLB_DX%+BLB_W%,BLB_DY%+170),BLB_MEM%:RETURN